home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / pdcurs21.zip / PRIVATE.ZIP / _QUERYAD.C < prev    next >
Text File  |  1992-11-21  |  8KB  |  251 lines

  1. #define        CURSES_LIBRARY  1
  2. #include <curses.h>
  3.  
  4. #ifndef        NDEBUG
  5. char *rcsid__queryad = "$Header: c:/curses/private/RCS/_queryad.c%v 2.0 1992/11/15 03:24:30 MH Rel $";
  6. #endif
  7.  
  8.  
  9.  
  10.  
  11. /*man-start*********************************************************************
  12.  
  13.   PDC_query_adapter_type()     - Determine PC video adapter type
  14.  
  15.   PDCurses Description:
  16.        This is a private PDCurses routine.
  17.  
  18.        Thanks to Jeff Duntemann, K16RA for providing the impetus
  19.        (through the Dr. Dobbs Journal, March 1989 issue) for getting
  20.        the routines below merged into Bjorn Larsson's PDCurses 1.3...
  21.                -- frotz@dri.com        900730
  22.  
  23.   PDCurses Return Value:
  24.        This function returns a macro identifier indicating the adapter
  25.        type.  See the list of adapter types in PRIVATE/CURSPRIV.H.
  26.  
  27.   PDCurses Errors:
  28.        No errors are defined for this function.
  29.  
  30.   Portability:
  31.        PDCurses        int PDC_query_adapter_type( void );
  32.  
  33. **man-end**********************************************************************/
  34.  
  35. #ifdef     OS2
  36. VIOCONFIGINFO  PDC_query_adapter_type(void)
  37. #else
  38. int    PDC_query_adapter_type(void)
  39. #endif
  40. {
  41. #ifdef FLEXOS
  42.        return (_FLEXOS);
  43. #endif
  44. #ifdef DOS
  45.        int     retval = _NONE;
  46.        int     equip;
  47.        short far *VIDEO_BASE;
  48.  
  49.        /*
  50.         * Attempt to call VGA Identify Adapter Function...
  51.         */
  52.        regs.h.ah = 0x1a;
  53.        regs.h.al = 0;
  54.        int86(0x10, ®s, ®s);
  55.        if ((regs.h.al == 0x1a) && (retval == _NONE))
  56.        {
  57.                /*
  58.                 * We know that the PS/2 video BIOS is alive and well.
  59.                 */
  60.                switch (regs.h.al)
  61.                {
  62.                case 0:
  63.                        retval = _NONE;
  64.                        break;
  65.                case 1:
  66.                        retval = _MDA;
  67.                        break;
  68.                case 2:
  69.                        retval = _CGA;
  70.                        break;
  71.                case 4:
  72.                        retval = _EGACOLOR;
  73.                        _cursvar.sizeable = TRUE;
  74.                        break;
  75.                case 5:
  76.                        retval = _EGAMONO;
  77.                        break;
  78.                case 26:
  79.                        retval = _VGACOLOR;     /* ...alt. VGA BIOS... */
  80.                case 7:
  81.                        retval = _VGACOLOR;
  82.                        _cursvar.sizeable = TRUE;
  83.                        break;
  84.                case 8:
  85.                        retval = _VGAMONO;
  86.                        break;
  87.                case 10:
  88.                case 13:
  89.                        retval = _MCGACOLOR;
  90.                        break;
  91.                case 12:
  92.                        retval = _MCGAMONO;
  93.                        break;
  94.                default:
  95.                        retval = _CGA;
  96.                        break;
  97.                }
  98.        }
  99.        else
  100.        {
  101.                /*
  102.                 * No VGA BIOS, check for an EGA BIOS by selecting an
  103.                 * Alternate Function Service...
  104.                 *
  105.                 * bx == 0x0010  -->  return EGA information
  106.                 */
  107.                regs.h.ah = 0x12;
  108.                regs.x.bx = 0x10;
  109.                int86(0x10, ®s, ®s);
  110.                if ((regs.h.bl != 0x10) && (retval == _NONE))
  111.                {
  112.                        /*
  113.                         * An EGA BIOS exists...
  114.                         */
  115.                        regs.h.ah = 0x12;
  116.                        regs.h.bl = 0x10;
  117.                        int86(0x10, ®s, ®s);
  118.                        if (regs.h.bh == 0)
  119.                                retval = _EGACOLOR;
  120.                        else
  121.                                retval = _EGAMONO;
  122.                }
  123.                else
  124.                if (retval == _NONE)
  125.                {
  126.                        /*
  127.                         * Now we know we only have CGA or MDA...
  128.                         */
  129.                        int86(0x11, ®s, ®s);
  130.                        equip = (regs.h.al & 0x30) >> 4;
  131.                        switch (equip)
  132.                        {
  133.                        case 1:
  134.                        case 2:
  135.                                retval = _CGA;
  136.                                break;
  137.                        case 3:
  138.                                retval = _MDA;
  139.                                break;
  140.                        default:
  141.                                retval = _NONE;
  142.                                break;
  143.                        }
  144.                }
  145.        }
  146.        VIDEO_BASE = (void far *) 0x0463L;
  147.        if (*VIDEO_BASE == 0x3d4)
  148.        {
  149.                _cursvar.video_seg = 0xb800;
  150.                switch (retval)
  151.                {
  152.                case _EGAMONO:
  153.                        retval = _EGACOLOR;
  154.                        break;
  155.                case _VGAMONO:
  156.                        retval = _VGACOLOR;
  157.                        break;
  158.                default:
  159.                        break;
  160.                }
  161.        }
  162.        if (*VIDEO_BASE == 0x3b4)
  163.        {
  164.                _cursvar.video_seg = 0xb000;
  165.                switch (retval)
  166.                {
  167.                case _EGACOLOR:
  168.                        retval = _EGAMONO;
  169.                        break;
  170.                case _VGACOLOR:
  171.                        retval = _VGAMONO;
  172.                        break;
  173.                default:
  174.                        break;
  175.                }
  176.        }
  177.        if ((retval == _NONE) ||
  178.            (retval == _CGA))
  179.        {
  180.                _cursvar.direct_video = FALSE;
  181.        }
  182.        if ((unsigned int) _cursvar.video_seg == 0xb000)
  183.                _cursvar.mono = TRUE;
  184.        else
  185.                _cursvar.mono = FALSE;
  186.        if  (!_cursvar.adapter)
  187.                _cursvar.adapter = retval;
  188.        return (PDC_sanity_check(retval));
  189. #endif
  190. #ifdef OS2
  191.        int     retval = _NONE;
  192.        VIOCONFIGINFO configInfo;
  193.  
  194.        VioGetConfig(0, &configInfo, 0);
  195.        _cursvar.sizeable = TRUE;
  196.         return configInfo;
  197. #  if     0
  198.        switch (configInfo.adapter)
  199.        {
  200.                case 0:
  201.                        retval = _MDA;
  202.                        _cursvar.mono =TRUE;
  203.                        break;
  204.                case 1:
  205.                        retval = _CGA;
  206.                        _cursvar.mono = FALSE;
  207.                        break;
  208.                case 2: switch (configInfo.display)
  209.                        {
  210.                                case 0:
  211.                                case 3:
  212.                                        retval = _EGAMONO;
  213.                                        _cursvar.mono = TRUE;
  214.                                        break;
  215.                                case 1:
  216.                                case 2:
  217.                                case 4:
  218.                                case 9:
  219.                                        retval = _EGACOLOR;
  220.                                        _cursvar.mono = FALSE;
  221.                                        break;
  222.                        }
  223.                        break;
  224.                case 3: switch (configInfo.display)
  225.                        {
  226.                                case 0:
  227.                                case 3:
  228.                                        retval = _VGAMONO;
  229.                                        _cursvar.sizeable = TRUE;
  230.                                        _cursvar.mono = TRUE;
  231.                                        break;
  232.                                case 1:
  233.                                case 2:
  234.                                case 4:
  235.                                case 9:
  236.                                        retval = _VGACOLOR;
  237.                                        _cursvar.sizeable = TRUE;
  238.                                        _cursvar.mono = FALSE;
  239.                                        break;
  240.                        }
  241.                        break;
  242.                default:
  243.                        retval = _CGA;
  244.                        _cursvar.mono = FALSE;
  245.                        break;
  246.        }
  247.        return (PDC_sanity_check(retval));
  248. #  endif
  249. #endif
  250. }
  251.